Jak zjistit zda-li je zmacknut zaroven treba levy ctrl?

Otázka od: Petr Varga

18. 11. 2002 9:11

Ahoj
Mam takovy problem... No potrebuji zjistit zda-li
je s zmacnutim nejake klavesy (reaguji v onkeyup)
je zaroven zmacknute treba CTRL... treba leve to je fuk. No jedine
co jsem zatim nasel je GetKeyStatus. No to vraci neco ve smyslu ze
podle toho jestli vyssi bit toho bytu je jedna nebo nula a pod.. No
Tak to zkousim takto I:Byte
Begin
 i:=GetKeyState(VK_LCONTROL);
 If Hi(i)=1 then showmessage('Je zmacknuty i levy ctrl');
end;

 No ale jak si to nefunguje.. Muzete nekdo poradit? Diky.. specha...

              Petr Varga

--
---
Levná dovolená na Slovensku i v Čechách ...
http://web.volny.cz/cestovani/sk.php

Odpovedá: Jaroslav Buček

18. 11. 2002 10:19


> je s zmacnutim nejake klavesy (reaguji v onkeyup)
> je zaroven zmacknute treba CTRL... treba leve to je fuk. No jedine

if ssCtrl in Shift then

Ahoj, Jarda

Odpovedá: Peter Ondras

19. 11. 2002 9:55

(*
Tento maly program ti zisti stlacenie CTRL a ALT. Pristup k informacii mas
globalne totalne pre cely program. Vytvor si novu aplikaciu, vloz na formular
jeden button. Prirad mu udalost Button1Click do OnClick. Formularu prirad
udalost FormCreate do OnCreate.
*)

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure AppIdle(Sender: TObject; var Done: Boolean);
  end;

var
  Form1: TForm1;
  CtrlKey, AltKey: Boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (CtrlKey) and (not AltKey) then ShowMessage('Len CTRL')
  else if (not CtrlKey) and (AltKey) then ShowMessage('Len ALT')
  else if (CtrlKey) and (AltKey) then ShowMessage('Obe klavesy')
  else ShowMessage('Ani jedna klavesa');
end;

procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
begin
  //ctrl
  if GetAsyncKeyState(VK_CONTROL) <> 0 then CtrlKey:=True
  else if GetAsyncKeyState(VK_CONTROL) = 0 then CtrlKey:=False;
  //alt
  if GetAsyncKeyState(VK_MENU) <> 0 then AltKey:=True
  else if GetAsyncKeyState(VK_MENU) = 0 then AltKey:=False;
  //tu mozu ist kontroly na dalsie klavesy
  Done:=True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle:=AppIdle;
end;

end.

Peter Ondras
peter.ondras@pse.sk
(+421) 0904 421 925

>: -----Original Message-----
>: From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
>: Behalf Of Petr Varga
>: Sent: Monday, November 18, 2002 8:28 AM
>: To: delphi-l@clexpert.cz
>: Subject: Jak zjistit zda-li je zmacknut zaroven treba levy ctrl?
>:
>: Ahoj
>: Mam takovy problem... No potrebuji zjistit zda-li
>: je s zmacnutim nejake klavesy (reaguji v onkeyup)
>: je zaroven zmacknute treba CTRL... treba leve to je fuk. No jedine
>: co jsem zatim nasel je GetKeyStatus. No to vraci neco ve smyslu ze
>: podle toho jestli vyssi bit toho bytu je jedna nebo nula a pod.. No
>: Tak to zkousim takto I:Byte
>: Begin
>: i:=GetKeyState(VK_LCONTROL);
>: If Hi(i)=1 then showmessage('Je zmacknuty i levy ctrl');
>: end;
>:
>: No ale jak si to nefunguje.. Muzete nekdo poradit? Diky.. specha...
>:
>: Petr Varga
>:
>: --
>: ---
>: Levná dovolená na Slovensku i v Čechách ...
>: http://web.volny.cz/cestovani/sk.php